package cn.ryh.designpatterndemo.singletonpattern;

/**
 * 懒汉式单例
 */

public class LazySingleton {

    private static LazySingleton ourInstance = null;

    /**
     * 私有化构造函数，防止在其他地方备实例化
     */
    private LazySingleton() {
    }

    /**
     * 双重校验锁创建实例，解决线程安全问题和效率问题
     */
    private static void synInit() {
        if (ourInstance == null) {
            synchronized (LazySingleton.class) {
                if (ourInstance == null) {
                    ourInstance = new LazySingleton();
                }
            }
        }
    }

    /**
     * 获取实例
     */
    public static LazySingleton getInstance() {
        if (ourInstance == null) {
            synInit();
        }
        return ourInstance;
    }
}